package tech.yingchuan.blogs.common;

import lombok.Getter;
import lombok.Setter;

import java.util.HashMap;
import java.util.Map;

/**
 *  自定义响应结构
 * <p>除前端表格响应结构采用{@link TableDataGridResult}
 * 前端控制返回json形式的数据，必须用 BaiNiuResult 进行包装
 * </p>
 * @author YcDr 丁广义
 * @version 1.0
 * @date 2017年12月1日
 */
@Getter
@Setter
public class ResponseResult<T> {

    private boolean ret;

    private String msg;

    private T data;

    public ResponseResult(boolean ret) {
        this.ret = ret;
    }

    /**
     * 数据响应成功调用
     * @param object 响应的数据
     * @param msg 响应的消息
     * @return
     */
    public static <T> ResponseResult success(T object, String msg) {
        ResponseResult result = new ResponseResult(true);
        result.data = object;
        result.msg = msg;
        return result;
    }
    /**
     * 数据响应成功调用
     * @param object 响应的数据
     * @return
     */
    public static <T> ResponseResult success(T object) {
        ResponseResult result = new ResponseResult(true);
        result.data = object;
        return result;
    }
    /**
     * 数据响应成功调用
     * @param msg 响应的数据
     * @return
     */
    public static <T> ResponseResult successMsg(String msg) {
        ResponseResult result = new ResponseResult(true);
        result.msg = msg;
        return result;
    }
    /**
     * 数据响应成功调用
     * @return
     */
    public static ResponseResult success() {
        return new ResponseResult(true);
    }

    /**
     * 响应失败时调用
     * @param msg 响应失败原因
     * @return
     */
    public static ResponseResult fail(String msg) {
        ResponseResult result = new ResponseResult(false);
        result.msg = msg;
        return result;
    }

    /**
     * 将数据组装为Map
     * @return
     */
    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<String, Object>(16);
        result.put("ret", ret);
        result.put("msg", msg);
        result.put("data", data);
        return result;
    }
}
